package com.specter.sure;

/**
 * Note:安全管理模块
 * 
 * 主系统(甲方公司系统) -> 我们做的系统
 * 
 * --前端需要准备一个空白页 或者随便一个页面 去请求后端的接口
 * 
 * ----后端返回一个值比如401 为未登录状态 重定向到主系统window.location.href(带系统id,回调地址)
 * 
 * ------主系统进行登录 登录成功 调回调地址 前端通过访问的地址拼接参数(code) 回调地址?code=***
 * 
 * --------访问前端第二个地址(回调地址) 前端通过访问的参数取code
 * 
 * ----------取到code后请求后端接口
 * 
 * ------------等待后端校验返回状态
 * 
 * --------------返回0 跳转到首页 登录成功
 * 
 * ----------------返回500 认证失败 跳转到错误页
 * 
 * 
 * 
 * # 安全认证（secure）
 * 1. 身份认证
 * 2. 权限过滤
 * 
 * ## 一、身份认证
 * 1. 单点登录认证和权限的过滤分开；
 * 
 * 2. 支持单点登录并提供基础的安全控制客户端单独导出（方便第三方直接使用），区分客户端和服务端
 * 
 * 获取access_token 从session cookie cas中获取， 没有access_token则登录；
 * 
 * 校验access_token 的合法性，同样也是三方校验，没有校验通过则要求用户登录；
 * 获取用户信息只能通过access_token和user_id来获取，并且做匹配校验，其他方式不能同用户名获取 ！！！ oauth2.0机制
 * 
 * session为本服务器，cookie为本应用相同的域，cas为中央认证服务器(redis缓存服务器)
 * cas有自己的独立的cookie，时间可以较长；
 * 为了防止token未过期而session过期影响业务进行，每次从cookie或者cas获得token后重新设置session
 * session未过期token过期则重新登录后重新设置；
 * 
 * 登录：可以是local登录，可以是cas登录，设置相应的 cache cookie session
 * 
 * 为client提供的客户端能不用第三方框架则不用！！！
 * 
 * 3. 支持访问连接的安全权限访问控制（保持以前的风格不变）权限主要通过session来验证
 * 
 * 4.
 * 支持OAuth2.0的登录集成（上面单点登录已经简单实现），此处主要为接口的调用提供支持需要session的api直接报错！！！开放的可以直接通过权限（前面会设置好session）
 * 
 * 
 * 4.1.
 * /security/oauth2/token?client_id=123456&client_secret=xxxx&timestamp=123456
 * 开发人员操作后台登录并且输入access_token
 * 
 * 4.2. 工厂模式通过判断access_token参数的有无来实现 OAuthenticationProviderImpl 和本地认证一样对外提供接口
 * 
 * 5.
 * 
 * @author Liang.Wang
 * @version Apr 12, 2011 3:14:28 PM
 * 
 */